/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.cip.esymons.eventos.beans;

import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import org.cip.esymons.eventos.bc.MatriculaDelegate;
import org.cip.esymons.eventos.bc.PreEventoDelegate;
import org.cip.esymons.eventos.be.Matricula;
import org.cip.esymons.eventos.be.Preevento;
import org.cip.esymons.general.util.ControladorAbstracto;
import org.cip.esymons.general.util.EnviaEmail;
import org.cip.esymons.general.util.Utiles;

/**
 *
 * @author Lizardo Rios
 */
public class EnvioNotasController {
    private MatriculaDelegate delegado;
    private Matricula matricula;
    private List<Matricula> listaMatricula;
    private List<Matricula> listaEnvios;
    private Integer codigoEvento;
    private String consideraciones;

    /*********************** Constructor de la clase *************************/
    public EnvioNotasController() {
        inicializar();
    }

    /*************************** Sets y Gettters *****************************/
    public Matricula getMatricula() {
        return matricula;
    }
    public void setMatricula(Matricula matricula) {
        this.matricula = matricula;
    }

    public Integer getCodigoEvento() {
       return codigoEvento;
    }
    public void setCodigoEvento(Integer codigoEvento) {
        this.codigoEvento = codigoEvento;
    }

    public MatriculaDelegate getDelegado() {
        return delegado;
    }

    public List<Matricula> getListaMatricula() {
        //listar();
        return listaMatricula;
    }
    public void setListaMatricula(List<Matricula> listaMatricula) {
        this.listaMatricula = listaMatricula;
    }

    public List<Matricula> getListaEnvios() {
        listar();
        return listaEnvios;
    }

    public String getConsideraciones() {
        llenarConsideraciones();
        return consideraciones;
    }

    public void setConsideraciones(String consideraciones) {
        this.consideraciones = consideraciones;
    }

    

    public void setListaEnvios(List<Matricula> listaEnvios) {
        this.listaEnvios = listaEnvios;
    }

    /**************************** Metodos ************************************/
    public String inicializar() {
        codigoEvento = 0;
        matricula = new Matricula();
        delegado = new MatriculaDelegate();
        listaMatricula = new ArrayList<Matricula>();
        listaEnvios = new ArrayList<Matricula>();
        consideraciones = "";
        return "";
    }

    public String listar() {
        try {
            System.out.print("Codigo Evento: " + codigoEvento);
            //listaMatricula = delegado.listarMatriculadosXCurso(codigoEvento);
            codigoEvento = (codigoEvento != null) ? codigoEvento : 0;
            listaEnvios = delegado.listarMatriculadosXCurso(codigoEvento);
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se pudo enviar todas la notas a los correos de los alumnos", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String enviarNotas() {
        try {
            Preevento pre = new Preevento();
            PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            pre = delegadoPreevento.findID(codigoEvento);
            if (pre == null) {
                mostrarMensaje("Error: ", "No existe eventos a enviar...", FacesMessage.SEVERITY_ERROR);
                return null;
            }
            System.out.println("nombre del evento: " + pre.getPreNombre());
            String origen = Utiles.dameCorreoInfoCIP();
            String asunto = "Nota del Curso/Diplomado: " + pre.getPreNombre();

            HttpServletRequest request =  ControladorAbstracto.getRequest();
            String rutaImagen = "/img/LogoCorreo.gif";
            String ruta = request.getRealPath(rutaImagen);
            String cuerpo2 = " para la cual se le agradece su participación, cualquier duda haganos saber.\n\n";
            cuerpo2 += "Saludos Cordiales.\n\n";
            cuerpo2 += "----------------------\n";
            cuerpo2 += "Ing° Erika Chinchayán\n";
            cuerpo2 += "Jefe de Sistemas @infoCIP\n";
            cuerpo2 += "CIP - CDLL.";
            int cont = 0;
            for (Matricula m : listaEnvios) {
                System.out.println("seEnvio: " + m.getSeEnvio());
                String destino = m.getPreinscripcionEvento().getPersonaNatural().getSolcorreopersonal1();
                System.out.println("correo: " + destino);
                String cuerpo = "       Estimado alumno: ";
                cuerpo += m.getPreinscripcionEvento().getPersonaNatural().getNombreCompleto();
                cuerpo += ", por el presente le estamos enviado la nota promedio del Curso/Diplomado que es: ";
                cuerpo += m.getMatpromFinal() + " " + cuerpo2;
                Boolean estado = (m.getSeEnvio() != null) ? m.getSeEnvio() : false;
                System.out.println("estado: " + estado);
                if (estado) {
                    if (Utiles.validarStrings(destino.trim())) {
                        if (destino.compareTo("-- no tiene correo --")!=0) {
                            String validarCorreo = Utiles.validarEmail(destino.trim());
                            System.out.println("validando correo...! " + validarCorreo);
                            if (validarCorreo == null) {
                                String mensaje = EnviaEmail.envia(origen, destino, asunto, cuerpo, ruta);
                                if (mensaje == null) {
                                    cont++;
                                    System.out.println("Envio Exitoso...");
                                    System.out.println("estoy entrando a nro envios....OK");
                                    m.setMatNroEnvios(m.getMatNroEnvios() + 1);
                                    System.out.println("estoy saliendo de nro envios...OK");
                                    delegado.modificarMatricula(m);
                                } else {
                                    System.out.println(mensaje);
                                }
                            }
                        }
                    }
                }
                destino = null;
                cuerpo = null;
            }
            if (cont>0) {
                mostrarMensaje("INFO: ", "Se envio con exito el correo a " + cont + " alumnos", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("INFO: ", "No se enviaron los correos, debe marcar en la casilla antes de grabar y revisar si el alumno tiene al menos un correo vigente", FacesMessage.SEVERITY_INFO);
            }
        } catch (Exception ex) {
            mostrarMensaje("Error: ", "No se pudo enviar todas la notas a los correos de los alumnos", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    public String enviarNotasModulo() {
        try {
            Preevento pre = new Preevento();
            PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            pre = delegadoPreevento.findID(codigoEvento);
            if (pre == null) {
                mostrarMensaje("Error: ", "No existe eventos a enviar...", FacesMessage.SEVERITY_ERROR);
                return null;
            }
            System.out.println("nombre del evento: " + pre.getPreNombre());
            String origen = "jobs_lizardo@hotmail.com";
            String asunto = "Nota del Curso/Diplomado: " + pre.getPreNombre();

            HttpServletRequest request =  ControladorAbstracto.getRequest();
            String rutaImagen = "/img/LogoCorreo.gif";
            String ruta = request.getRealPath(rutaImagen);
            String cuerpo2 = " para la cual se le agradece su participación, cualquier duda haganos saber.\n\n";
            cuerpo2 += "Saludos Cordiales.\n\n";
            cuerpo2 += "----------------------\n";
            cuerpo2 += "Ing° Erika Chinchayán\n";
            cuerpo2 += "Jefe de Sistemas @infoCIP\n";
            cuerpo2 += "CIP - CDLL.";
            int cont = 0;
            for (Matricula m : listaEnvios) {
                System.out.println("seEnvio: " + m.getSeEnvio());
                String destino = m.getPreinscripcionEvento().getPersonaNatural().getSolcorreopersonal1();
                System.out.println("correo: " + destino);
                String cuerpo = "       Estimado alumno: ";
                cuerpo += m.getPreinscripcionEvento().getPersonaNatural().getNombreCompleto();
                cuerpo += ", por el presente le estamos enviado la nota promedio del Curso/Diplomado que es: ";
                cuerpo += m.getMatpromFinal() + " " + cuerpo2;
                Boolean estado = (m.getSeEnvio() != null) ? m.getSeEnvio() : false;
                System.out.println("estado: " + estado);
                if (estado) {
                    if (Utiles.validarStrings(destino)) {
                        if (destino.compareTo("-- no tiene correo --")!=0) {
                            String validarCorreo = Utiles.validarEmail(destino.trim());
                            if (validarCorreo == null) {
                                String mensaje = EnviaEmail.envia(origen, destino, asunto, cuerpo, ruta);
                                if (mensaje == null) {
                                    cont++;
                                    System.out.println("Envio Exitoso...");
                                    System.out.println("estoy entrando a nro envios....OK");
                                    m.setMatNroEnvios(m.getMatNroEnvios() + 1);
                                    System.out.println("estoy saliendo de nro envios...OK");
                                    delegado.modificarMatricula(m);
                                } else {
                                    System.out.println(mensaje);
                                }
                            }
                        }
                    }
                }
                destino = null;
                cuerpo = null;
            }
            if (cont>0) {
                mostrarMensaje("INFO: ", "Se envio con exito el correo a " + cont + " alumnos", FacesMessage.SEVERITY_INFO);
            } else {
                mostrarMensaje("INFO: ", "No se enviaron los correos, debe marcar en la casilla antes de grabar y revisar si el alumno tiene al menos un correo vigente", FacesMessage.SEVERITY_INFO);
            }
        } catch (Exception ex) {
            mostrarMensaje("ERROR: ", "No se pudo enviar todas la notas a los correos de los alumnos", FacesMessage.SEVERITY_ERROR);
            System.out.println("FATAL: " + ex.getMessage());
        }
        return null;
    }

    private void llenarConsideraciones() {
        consideraciones  = "1. Elegir un curso o diplomado\n";
        consideraciones += "2. Seleccionar la casilla de los alumnos a los que va a enviar los correos";
        consideraciones += "3. Debe revisar que los alumnos tenga un correo valido sino no se va a poder enviar los correos";
    }

    public SelectItem[] getComboCursos() {
        try {
            PreEventoDelegate delegadoPreevento = new PreEventoDelegate();
            System.out.println("Ingreso 1");
            SelectItem[] selects = null;
            List<Preevento> listaCursos = delegadoPreevento.listarCursos();
            delegadoPreevento = null;
            selects = new SelectItem[listaCursos.size()];
            int cont = 0;
            for (Preevento preevento : listaCursos) {
                SelectItem item = new SelectItem(preevento.getPreCodigo(), preevento.getPreNombre());
                selects[cont++] = item;
            }
            return selects;
        } catch (Exception e) {
            System.out.println("Ingreso Error: " + e.getMessage());
            SelectItem[] selects = new SelectItem[1];
            SelectItem item = new SelectItem(null, "No existen cursos");
            selects[0] = item;
            return selects;
        }
    }

    public void mostrarMensaje(String resumen, String detalle, FacesMessage.Severity severidad) {
        try {
            FacesMessage fm = new FacesMessage(severidad, resumen, detalle);
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        } catch (Exception e) {
            FacesMessage fm = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage());
            FacesContext.getCurrentInstance().addMessage(fm.toString(), fm);
        }
    }



}
